local string = string
local tonumber = tonumber

local url = {}

local function decode_func(c)
    return string.char(tonumber(c, 16))
end

local function decode(str)
    local str = str:gsub("+", " ")
    return str:gsub("%%(..)", decode_func)
end

function url.parse(u)
    local path, query = u:match "([^?]*)%??(.*)"
    if path then
        path = decode(path)
    end
    return path, query
end

function url.parsequery(q)
    local r = {}
    for k, v in q:gmatch "(.-)=([^&]*)&?" do
        r[decode(k)] = decode(v)
    end
    return r
end

return url
